/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

import banco.ConnectionFactory;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import modelo.Megadog;

/**
 *
 * @author bruno
 */
public class MegadogDAOImp implements MegadogDAO {

    private Connection conn;

    /**
     * construtor que se conecta ao banco de dados
     *
     * @throws java.lang.Exception se não houver conexão
     */
    public MegadogDAOImp() throws Exception {
        try {
            this.conn = ConnectionFactory.getConnection();

        } catch (Exception e) {
            throw new Exception("Erro: "
                    + "\n" + e.getMessage());
        }
    }

    /**
     * Método que insere dados na tabela Clientes
     *
     *  * @throws java.lang.Exception se não conseguir inserir
     */
    public void gravar(Megadog megadog) throws Exception {
        PreparedStatement ps = null;
        Connection conn = null;
        if (megadog == null) {
            throw new Exception("O valor passado não pode ser nulo");
        }

        try {
            String SQL = "INSERT INTO TB_MEGADOG (MEG_DESCRI, MEG_VALOR) "
                    + "values (?, ?)";
            conn = this.conn;
            ps = conn.prepareStatement(SQL);
            ps.setString(1, megadog.getDescricao());
            ps.setBigDecimal(2, megadog.getValor());

            ps.executeUpdate();

        } catch (SQLException sqle) {
            throw new Exception("Erro ao inserir dados " + sqle);
        } finally {
            ConnectionFactory.closeConnection(conn, ps);
        }
    }

    @Override
    public List<Megadog> mostraTodos() throws Exception {
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs = null;
        List<Megadog> lista = new ArrayList<Megadog>();
        try {
            String SQL = "SELECT * FROM TB_MEGADOG";
            conn = this.conn;
            ps = conn.prepareStatement(SQL);
            rs = ps.executeQuery();
            while (rs.next()) {
                Megadog megadog = new Megadog();
                megadog.setId(rs.getInt("MEG_ID"));
                megadog.setDescricao(rs.getString("MEG_DESCRI"));
                megadog.setValor(rs.getBigDecimal("MEG_VALOR"));
                lista.add(megadog);
            }

        } catch (SQLException sqle) {
            throw new Exception("Erro ao inserir dados " + sqle);
        } finally {
            ConnectionFactory.closeConnection(conn, ps, rs);
            return lista;
        }
    }

    public void salvar(Megadog megadog) throws Exception {
        PreparedStatement ps = null;
        Connection conn = null;
        try {
            String SQL = "UPDATE TB_MEGADOG SET MEG_DESCRI = ?, MEG_INGRE = ?, MEG_VALOR = ?"
                    + " WHERE MEG_ID = ?";
            conn = this.conn;
            ps = conn.prepareStatement(SQL);
            ps.setString(1, megadog.getDescricao());
            ps.setBigDecimal(2, megadog.getValor());
            ps.setInt(3, megadog.getId());

            ps.executeUpdate();

        } catch (SQLException sqle) {
            throw new Exception("Erro ao alterar dados " + sqle);
        } finally {
            ConnectionFactory.closeConnection(conn, ps);
        }
    }
}
